package com.yanqu.road.server.manager.activity.daomu;

import com.yanqu.road.entity.activity.daomu.config.*;
import com.yanqu.road.entity.activity.daomu.data.DaoMuActivityUserCollectionData;
import com.yanqu.road.entity.activity.daomu.data.DaoMuActivityUserData;
import com.yanqu.road.entity.activity.daomu.data.DaoMuActivityUserOfferRewardData;
import com.yanqu.road.entity.enums.eActivityConfigType;
import com.yanqu.road.entity.enums.eActivityType;
import com.yanqu.road.entity.enums.eGamePlayerEventType;
import com.yanqu.road.entity.player.CrossUserBaseInfo;
import com.yanqu.road.entity.player.UserBaseInfo;
import com.yanqu.road.logic.bussiness.activity.DaoMuActivityBusiness;
import com.yanqu.road.server.manager.activity.daomu.pvp.DaoMuActivityPvp;
import com.yanqu.road.server.manager.user.CrossUserMgr;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

public class DaoMuActivity {

    //活动配置信息
    private DaoMuActivityConfig daoMuActivityConfig;

    //玩家MAP
//    private Map<Long, DaoMuActivityUser> playerMap = new ConcurrentHashMap<>();

    // pvp活动
    private DaoMuActivityPvp daoMuActivityPvp;

    public DaoMuActivityPvp getDaoMuActivityPvp() {
        return daoMuActivityPvp;
    }

    /**
     * 构造函数
     * @param daoMuActivityConfig
     */
    public DaoMuActivity(DaoMuActivityConfig daoMuActivityConfig) {
        this.daoMuActivityConfig = daoMuActivityConfig;
        //加载活动数据
        this.initData();
    }

    /**
     * 加载活动数据
     * @return
     */
    private void initData() {
//        //读取玩家数据
//        Map<Long, DaoMuActivityUserData> userMap = DaoMuActivityBusiness.getDaoMuActivityUserData(this.daoMuActivityConfig.getActivityId());
//        for (DaoMuActivityUserData userData : userMap.values()) {
//            //获取玩家基础信息
//            CrossUserBaseInfo crossUserBaseInfo = CrossUserMgr.getCrossUserBaseInfo(userData.getUserId());
//            DaoMuActivityUser daoMuActivityUser = new DaoMuActivityUser(userData, this.daoMuActivityConfig, crossUserBaseInfo.getUserBaseInfo());
//            this.playerMap.put(daoMuActivityUser.getUserId(), daoMuActivityUser);
//            //加载藏品数据
//            Map<Integer, DaoMuActivityUserCollectionData> collectionData = DaoMuActivityBusiness.getDaoMuActivityUserCollectionData(this.daoMuActivityConfig.getActivityId(), userData.getUserId());
//            daoMuActivityUser.setUserCollectionDataMap(collectionData);
//            //加载玩家悬赏数据
//            Map<Integer, Map<Integer, DaoMuActivityUserOfferRewardData>> offerRewardMap = DaoMuActivityBusiness.getDaoMuActivityUserOfferRewardData(this.daoMuActivityConfig.getActivityId(), userData.getUserId());
//            daoMuActivityUser.setUserOfferRewardDataMap(offerRewardMap);
//        }
        // 加载pvp活动
//        if (daoMuActivityConfig.getActivityInfo().getType() == eActivityType.DaoMu.getValue()) {
            this.daoMuActivityPvp = new DaoMuActivityPvp(daoMuActivityConfig);
//        }
    }

    /**
     * 加载活动配置数据
     * @param daoMuActivityConfig
     */
    public void initConfig(DaoMuActivityConfig daoMuActivityConfig) {
        this.daoMuActivityConfig = daoMuActivityConfig;
//        for (DaoMuActivityUser daoMuActivityUser : playerMap.values()) {
//            daoMuActivityUser.setDaoMuActivityConfig(daoMuActivityConfig);
//        }
        // pvp的也加载下
        DaoMuActivityPvp activityPvp = this.getDaoMuActivityPvp();
        if (activityPvp != null) {
            activityPvp.reloadConfig(daoMuActivityConfig);
        }
    }

    /**
     * 存储数据
     */
    public void save() {
//        //存储玩家数据
//        for (DaoMuActivityUser daoMuActivityUser : playerMap.values()) {
//            DaoMuActivityUserData userData = daoMuActivityUser.getDaoMuActivityUserData();
//            if(userData.isInsertOption()){
//                DaoMuActivityBusiness.addUserData(userData);
//            }else if(userData.isUpdateOption()){
//                DaoMuActivityBusiness.updateUserData(userData);
//            }
//            //存储藏品数据
//            Map<Integer, DaoMuActivityUserCollectionData> collectionDataMap = daoMuActivityUser.getUserCollectionDataMap();
//            for (DaoMuActivityUserCollectionData collectionData : collectionDataMap.values()) {
//                if(collectionData.isInsertOption()){
//                    DaoMuActivityBusiness.addCollectionData(collectionData);
//                }else if(collectionData.isUpdateOption()){
//                    DaoMuActivityBusiness.updateCollectionData(collectionData);
//                }
//            }
//            //存储关卡悬赏数据
//            Map<Integer, Map<Integer, DaoMuActivityUserOfferRewardData>> offerRewardDataMap = daoMuActivityUser.getUserOfferRewardDataMap();
//            for (Map<Integer, DaoMuActivityUserOfferRewardData> npcMap : offerRewardDataMap.values()) {
//                for (DaoMuActivityUserOfferRewardData offerRewardData : npcMap.values()) {
//                    if(offerRewardData.isInsertOption()){
//                        DaoMuActivityBusiness.addOfferRewardData(offerRewardData);
//                    }else if(offerRewardData.isUpdateOption()){
//                        DaoMuActivityBusiness.updateOfferRewardData(offerRewardData);
//                    }
//                }
//            }
//        }
//        // 日志保存
//        try {
//            DaoMuActivityPveLog.save();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }

    /**
     * 获取活动配置
     * @return
     */
    public DaoMuActivityConfig getDaoMuActivityConfig() {
        return daoMuActivityConfig;
    }

//    /**
//     * 获取玩家
//     * @param playerId
//     * @return
//     */
//    public DaoMuActivityUser getPlayer(long playerId) {
//        return this.playerMap.get(playerId);
//    }

//    /**
//     * 创建玩家
//     * @param playerId
//     */
//    public DaoMuActivityUser createPlayer(long playerId, UserBaseInfo userBaseInfo, int historyPassesId) {
//        //默认角色
//        String defaultRoleIdStr = this.daoMuActivityConfig.getDaoMuActivityConfigValue(eActivityConfigType.DAOMU_PARTNER_INITIAL_UNLOCK_ITEM_ID);
//        int defaultRoleId = Integer.parseInt(defaultRoleIdStr);
//        //默认进度宝箱ID
//        int progressBoxId = this.daoMuActivityConfig.getDefaultProgressBoxId();
//        //创建玩家
//        DaoMuActivityUserData daoMuActivityUserData = new DaoMuActivityUserData();
//        daoMuActivityUserData.setActivityId(this.daoMuActivityConfig.getActivityId());
//        daoMuActivityUserData.setUserId(playerId);
//        daoMuActivityUserData.setPassesId(this.daoMuActivityConfig.getDefaultPassesId());//默认关卡
//        daoMuActivityUserData.setPassPrePassesTime(0);
//        daoMuActivityUserData.setEndlessWave(0);
//        daoMuActivityUserData.setEnergy(0);//体力初始值
//        daoMuActivityUserData.setCreateTime(System.currentTimeMillis());
//        daoMuActivityUserData.setLastRestoreTime(0);
//        daoMuActivityUserData.setServerId(userBaseInfo.getServerId());
//        daoMuActivityUserData.setProgressBoxId(progressBoxId);
//        daoMuActivityUserData.setBoxProgress(0);
//        daoMuActivityUserData.setPassAllFlag(0);
//        daoMuActivityUserData.setHistoryMaxPassesId(historyPassesId);
//        daoMuActivityUserData.setInsertOption();
//        DaoMuActivityUser daoMuActivityUser = new DaoMuActivityUser(daoMuActivityUserData, this.daoMuActivityConfig, userBaseInfo);
//        if (this.daoMuActivityConfig.getActivityInfo().getType() == eActivityType.DaoMu.getValue()) {
//            //解锁角色
//            daoMuActivityUser.unlockRole(defaultRoleId);
//            //解锁默认藏品
//            daoMuActivityUser.unlockDefaultCollection();
//        }
//        daoMuActivityUserData.setRoleId(defaultRoleId);//默认角色
//        //put playerMap
//        this.playerMap.put(playerId, daoMuActivityUser);
//        return daoMuActivityUser;
//    }
}
